/*
 * @lc app=leetcode.cn id=318 lang=cpp
 *
 * [318] 最大单词长度乘积
 */

// @lc code=start
class Solution {
public:
    int maxProduct(vector<string>& words) {
        //核心在于判断两个字符串是否重复
        //一般来说可以用哈希表进行比较
        //但是对于小写字母组成的字符串
        //可以用26位二进制
        //每一位表示某一字母是否出现
        //用位运算中的与运算，判断是否有重复字母

        vector<int> mark;
        //建立26位二进制时，使用或运算
        for(auto word : words){
            int temp = 0;
            for(auto c : word){
                temp |= 1 << (c - 'a');
            }
            mark.push_back(temp);
        }

        int ans = 0;
        for(int i = 0; i < words.size(); i++)
            for(int j = i + 1; j < words.size(); j++){
                if((mark[i] & mark[j]) == 0)
                    ans = max(ans, int(words[i].size() * words[j].size()));
            }
        
        return ans;
    }
};
// @lc code=end

